hhkb
모의해킹

호스트기반모의해킹_13_웹 취약점 진단(LFI&CI)

작성자 : Heehyeon Yoo|2025-11-25
# 모의해킹# Web# LFI# CI# Burp Suite

1. 개요

웹 애플리케이션에서 가장 위험한 취약점 유형은 입력값 검증 부재(Lack of Input Validation)이다. 사용자가 전달한 데이터를 서버가 의심 없이 신뢰할 때 발생한다.

2. 로컬 파일 인클루션(Local File Inclusion, LFI)

2.1 개념

서버의 페이지 포함(Include) 기능을 악용하여, 공격자가 원하는 서버 내부 파일(/etc/passwd 등)을 읽어오는 취약점.

  • 원리: include($page)와 같은 함수에서 $page 파라미터에 대한 경로 통제가 없을 때 발생.

2.2 진단 및 공격 기법

  1. 경로 탐색(Path Traversal):
    • 상위 디렉토리로 이동하는 ../ 문자를 사용한다.
    • Payload: page=../../../../etc/passwd
  2. 널 바이트(Null Byte) 우회:
    • 일부 구형 PHP에서는 뒤에 붙는 확장자(.php)를 무시하기 위해 %00을 사용하기도 한다.(최신 버전은 패치됨)

2.3 자동화 도구

  • lfimap: LFI 취약점 스캔에 특화된 파이썬 도구.
    python3 lfimap.py -u "http://target/vulnerable.php?page=FUZZ" -a
    
    • 특징: 다양한 래퍼(Wrapper)와 필터 우회 기법을 자동으로 시도한다.

3. 커맨드 인젝션(Command Injection)

3.1 개념

웹 애플리케이션이 시스템 함수(system(), exec())를 통해 운영체제 명령어를 실행할 때, 공격자의 악성 명령어를 함께 실행시키는 취약점.

  • 예시: 관리자 페이지의 "Ping Test" 기능.

3.2 쉘 메타 문자(Shell Meta Characters)

리눅스/윈도우 쉘에서 명령어를 구분하거나 연계하는 특수 문자.

  • ;(세미콜론): 앞 명령어가 끝나면 뒤 명령어 실행.(ping 127.0.0.1; cat /etc/passwd)
  • &&(AND): 앞 명령어가 성공하면 뒤 명령어 실행.
  • |(Pipe): 앞 명령어의 출력을 뒤 명령어의 입력으로 전달.
  • $() 또는 `(Backtick): 명령어 실행 결과를 문자열로 치환.

3.3 주의사항: URL 인코딩

HTTP 프로토콜에서 &, ; 같은 문자는 파라미터 구분자 등 특수한 의미를 가진다.

  • 필수: 메타 문자를 페이로드로 보낼 때는 반드시 URL Encoding을 적용해야 한다.
    • & -> %26
    • Burp Suite 단축키: Ctrl + U

3.4 진단 기법

  1. 수동 진단: Repeater를 사용하여 메타 문자와 id, whoami 명령어를 조합해 응답값을 확인한다.
  2. Intruder 활용: 다양한 메타 문자와 난독화 기법이 포함된 사전(Polyglot Payload)을 Intruder로 브루트 포싱하여, 응답 길이(Length)나 시간 차이(Time-based)로 성공 여부를 판단한다.

4. 실무에서는?

  • LFI는 RCE의 전조: 단순히 파일을 읽는 것을 넘어, Log Poisoning이나 PHP Wrapper를 이용하면 원격 코드 실행(RCE)으로 발전할 수 있다.
  • Command Injection의 파급력: 서버의 쉘 권한을 탈취하는 것이므로, 발견 즉시 Critical(치명적) 등급으로 분류된다.
  • Blacklist 필터링의 한계: 공백을 막으면 ${IFS}를 쓰고, cat을 막으면 more를 쓴다. 블랙리스트보다는 안전한 API 사용이 근본적인 해결책이다.